//
//  ThreadLockViewController.m
//  JKThreadTest
//
//  Created by 王冲 on 2018/10/23.
//  Copyright © 2018年 JK科技有限公司. All rights reserved.
//

#import "ThreadLockViewController.h"
// 1.OSSpinLock：自旋锁（不睡眠，循环，让线程卡住）
#import "OSSpinLockDemo.h"
// 2.OSUnfair_lock: 互斥锁（睡眠）
#import "OSUnfair_lockDemo.h"
// 3.pthread_mutex：互斥锁（睡眠）
#import "Pthread_mutexLockDemo.h"
// 4.pthread_mutex递归锁（睡眠）
#import "Pthread_mutexLockDemo2.h"
// 5.pthread_mutex带有条件的z互斥锁（睡眠）
#import "Pthread_mutexLockDemo3.h"
// 6.NSLock 对pthread_mutex的封装，面向对象
#import "NSLockDemo.h"
// 7.NSRecursiveLock 递归锁（睡眠）
#import "NSRecursiveLockDemo.h"
// 8.NSCondition 带有条件的互斥锁（睡眠）
#import "NSConditionDemo.h"
// 9.NSConditionLock(带有条件的互斥锁):是对NSCondition的进一步封装，可以设置具体的条件值
#import "NSConditionLockDemo.h"
// 10:dispatch_queu 直接使用GCD的串行队列，也是可以实现线程同步的
#import "Dispatch_queueDemo.h"
// 11:dispatch_semaphore:利用最大并发数为1 来l保证线程同步
#import "Dispatch_semaphoreDemo.h"
// 12:@synchronized是对mutex递归锁的封装
#import "SynchronizedDemo.h"

@interface ThreadLockViewController ()

// 1.自旋锁 OSSpinLoc
@property(nonatomic,strong) OSSpinLockDemo *demo1;
// 2.OSUnfair_lock
@property(nonatomic,strong) OSUnfair_lockDemo *demo2;
// 3.互斥锁 pthread_mutex
@property(nonatomic,strong) Pthread_mutexLockDemo *demo3;
// 4.递归锁 pthread_mutex：PTHREAD_MUTEX_RECURSIVE
@property(nonatomic,strong) Pthread_mutexLockDemo2 *demo4;
// 5.带有条件的锁 pthread_mutex
@property(nonatomic,strong) Pthread_mutexLockDemo3 *demo5;
// 6.NSLock 对pthread_mutex的封装，面向对象
@property(nonatomic,strong) NSLockDemo *demo6;
// 7.NSRecursiveLockDemo 对pthread_mutex递归锁的封装，面向对象
@property(nonatomic,strong) NSRecursiveLockDemo *demo7;
// 8.NSCondition 带有条件的互斥锁（睡眠）
@property(nonatomic,strong) NSConditionDemo *demo8;
// 9.NSConditionLock(带有条件的互斥锁):是对NSCondition的进一步封装，可以设置具体的条件值
@property(nonatomic,strong) NSConditionLockDemo *demo9;
// 10.dispatch_queu 直接使用GCD的串行队列，也是可以实现线程同步的
@property(nonatomic,strong) Dispatch_queueDemo *demo10;
// 11.dispatch_semaphore:利用最大并发数为1 来l保证线程同步
@property(nonatomic,strong) Dispatch_semaphoreDemo *demo11;
// 12.@synchronized是对mutex递归锁的封装
@property(nonatomic,strong) SynchronizedDemo *demo12;

@end

@implementation ThreadLockViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    self.view.backgroundColor = [UIColor whiteColor];
    
    // 1.自旋锁 OSSpinLoc
    //self.demo1 = [[OSSpinLockDemo alloc]init];
    //[self.demo1 ticketTest];
    
    // 2.互斥锁 OSUnfair_lock
    //self.demo2 = [[OSUnfair_lockDemo alloc]init];
    //[self.demo2 ticketTest];
    
    // 3.互斥锁 pthread_mutex
    // self.demo3 = [[Pthread_mutexLockDemo alloc]init];
    // [self.demo3 ticketTest];
    
    // 4.递归锁 pthread_mutex
    // self.demo4 = [[Pthread_mutexLockDemo2 alloc]init];
    // [self.demo4 otherTest];
    
    // 5.互斥锁（带有条件的互斥锁） pthread_mutex
    // self.demo5 = [[Pthread_mutexLockDemo3 alloc]init];
    // [self.demo5 otherTest];
    
    // 6.NSLock 对pthread_mutex的封装，面向对象
    // self.demo6 = [[NSLockDemo alloc]init];
    // [self.demo6 ticketTest];
    // [self.demo6 moneyTest];
    
    // 7.递归锁 NSRecursiveLockDemo 对pthread_mutex递归锁的封装，面向对象
    // self.demo7 = [[NSRecursiveLockDemo alloc]init];
    // [self.demo7 otherTest];

    // 8.NSCondition 带有条件的互斥锁（睡眠）
    // self.demo8 = [[NSConditionDemo alloc]init];
    // [self.demo8 otherTest];
    
    // 9.NSConditionLock(带有条件的互斥锁):是对NSCondition的进一步封装，可以设置具体的条件值
    // self.demo9 = [[NSConditionLockDemo alloc]init];
    // [self.demo9 otherTest];
    
    // 10.NSConditionLock(带有条件的互斥锁):是对NSCondition的进一步封装，可以设置具体的条件值
    // self.demo10 = [[Dispatch_queueDemo alloc]init];
    // [self.demo10 ticketTest];
    
    // 11.dispatch_semaphore:利用最大并发数为1 来l保证线程同步
    // self.demo11 = [[Dispatch_semaphoreDemo alloc]init];
    // [self.demo11 ticketTest];
    
    // 12.dispatch_semaphore:利用最大并发数为1 来l保证线程同步
    self.demo12 = [[SynchronizedDemo alloc]init];
    // [self.demo12 otherTest];
    [self.demo12 ticketTest];
}

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    
   
    
}

@end
